#include "pthread.h"
#include "log/log.h"
#include <mqueue.h>
#include "string.h"

static mqd_t mqd;

void *fun1(void *args)
{
    char lenbuff[1024];
    lenbuff[11] = 'a'; //为了验证mq_send时strlen需不需要+1,答案：需要 ，如果不加这里的值就会起作用
    lenbuff[12] = 'a'; //如果不加也可以，但要确保lenbuff初始化为0
    size_t recv_bytes = mq_receive(mqd, lenbuff, sizeof(lenbuff), NULL);
    if (recv_bytes != -1)
    {
        log_info("收到的消息 %s", lenbuff);
    }
}

int main()
{
    // 创建消息队列
    struct mq_attr attr = {
        .mq_flags = 0,      // 默认值，阻塞模式
        .mq_maxmsg = 10,    // 最大消息数
        .mq_msgsize = 1024, // 每条消息最大字节数
    };
    mqd = mq_open("/mq_test",O_CREAT |  O_RDWR , 0644,&attr);//0644其中0表示特殊权限，644就是所属用户，用户组，其他用户 权限
    if (mqd == -1)
    {
        log_error("mq_open_error");
        return -1;
    }
    log_info("mq_open success!");

    // 创建线程
    pthread_t id;
    pthread_create(&id, NULL, fun1, NULL);

    // 主线程给子线程发消息
    mq_send(mqd, "hello world", strlen("hello world")+1, 0);
    pthread_join(id, NULL); // 等待线程结束
    mq_close(mqd);
    mq_unlink("/mq_test");
    return 0;
}